/*
 * ClienteEmpresa.java
 *
 * Created on 16 de Maio de 2007, 15:01
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package pt.iscte.dcti.es.rhplus.utilizador;

import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Hashtable;
import java.util.LinkedList;

import pt.iscte.dcti.es.rhplus.sistema.CodigoPostal;
import pt.iscte.dcti.es.rhplus.sistema.persistencia.AcessoBD;

/**
 * 
 * @author Gustavo Cabral
 * @author Helena Monteiro
 * @author Joao Catarino
 * @author Tiago Moreiras
 */
public class ClienteEmpresa extends Cliente {

	/** Creates a new instance of ClienteEmpresa */
	public ClienteEmpresa(final int id_pessoa, final String nome, final char sexo, final int bi, final Date data_de_nascimento, final int nif,
			final String email, final int telefone, final int telemovel, final String morada, final String grupo_sanguineo,
			final CodigoPostal codigo_postal, final LinkedList<TratamentoPassado> lista_de_tratamentos_passados,
			LinkedList<DoencaPassada> lista_de_doencas_passadas, final int numero_de_cliente, final LinkedList<MembroDoAgregado> membros_do_agregado,
			final int id_empresa, final int numero_de_ordem) {

		super(id_pessoa, nome, sexo, bi, data_de_nascimento, nif, email, telefone, telemovel, morada, grupo_sanguineo, codigo_postal,
				lista_de_tratamentos_passados, lista_de_doencas_passadas, numero_de_cliente, membros_do_agregado);

		this.id_empresa = id_empresa;
		this.numero_de_ordem = numero_de_ordem;
		this.tipo = "empresa";
	}

	public int getIdEmpresa() {
		return id_empresa;
	}

	public void setIdEmpresa(final int id_empresa) {
		this.id_empresa = id_empresa;
	}

	public int getNumeroDeOrdem() {
		return numero_de_ordem;
	}

	public static ClienteEmpresa devolve(final String username) throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("visualizar_cliente_empresa_por_username");
		Hashtable<String, Object> dados_da_pessoa = new Hashtable<String, Object>();
		dados_da_pessoa.put("var_username", username);
		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_da_pessoa);

		result_set.next();

		int id_codigo_postal = result_set.getInt("id_codigo_postal");

		// Cria o Membro do Agregado e os outros elementos necessarios
		int id_pessoa = result_set.getInt("id_pessoa");
		String nome = result_set.getString("nome");
		char sexo = result_set.getString("sexo").charAt(0);
		int bi = result_set.getInt("bi");
		Date data_de_nascimento = result_set.getDate("data_de_nascimento");
		int nif = result_set.getInt("nif");
		String email = result_set.getString("email");
		int telefone = result_set.getInt("telefone");
		int telemovel = result_set.getInt("telemovel");
		String morada = result_set.getString("morada");
		String grupo_sanguineo = result_set.getString("grupo_sanguineo");
		int numero_de_cliente = result_set.getInt("numero_de_cliente");
		int id_empresa = result_set.getInt("id_empresa");
		int numero_de_ordem = result_set.getInt("numero_de_ordem");

		acesso_bd.fechaLigacao();

		CodigoPostal codigo_postal = CodigoPostal.devolve(id_codigo_postal);
		LinkedList<TratamentoPassado> lista_de_tratamentos_passados = TratamentoPassado.devolveTodosDoUtente(id_pessoa);
		LinkedList<DoencaPassada> lista_de_doencas_passadas = DoencaPassada.devolveTodasDoUtente(id_pessoa);
		LinkedList<MembroDoAgregado> membros_do_agregado = MembroDoAgregado.devolveTodosDoCliente(id_pessoa);

		ClienteEmpresa cliente_empresa = new ClienteEmpresa(id_pessoa, nome, sexo, bi, data_de_nascimento, nif, email, telefone, telemovel, morada,
				grupo_sanguineo, codigo_postal, lista_de_tratamentos_passados, lista_de_doencas_passadas, numero_de_cliente, membros_do_agregado,
				id_empresa, numero_de_ordem);

		return cliente_empresa;
	}

	public static ClienteEmpresa devolve(final int id_cliente) throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("visualizar_cliente_empresa_por_id");
		Hashtable<String, Object> dados_da_pessoa = new Hashtable<String, Object>();
		dados_da_pessoa.put("var_id_cliente", id_cliente);
		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_da_pessoa);

		result_set.next();

		int id_codigo_postal = result_set.getInt("id_codigo_postal");

		// Cria o Membro do Agregado e os outros elementos necessarios
		String nome = result_set.getString("nome");
		char sexo = result_set.getString("sexo").charAt(0);
		int bi = result_set.getInt("bi");
		Date data_de_nascimento = result_set.getDate("data_de_nascimento");
		int nif = result_set.getInt("nif");
		String email = result_set.getString("email");
		int telefone = result_set.getInt("telefone");
		int telemovel = result_set.getInt("telemovel");
		String morada = result_set.getString("morada");
		String grupo_sanguineo = result_set.getString("grupo_sanguineo");
		int numero_de_cliente = result_set.getInt("numero_de_cliente");
		int id_empresa = result_set.getInt("id_empresa");
		int numero_de_ordem = result_set.getInt("numero_de_ordem");

		acesso_bd.fechaLigacao();

		CodigoPostal codigo_postal = CodigoPostal.devolve(id_codigo_postal);
		LinkedList<TratamentoPassado> lista_de_tratamentos_passados = TratamentoPassado.devolveTodosDoUtente(id_cliente);
		LinkedList<DoencaPassada> lista_de_doencas_passadas = DoencaPassada.devolveTodasDoUtente(id_cliente);
		LinkedList<MembroDoAgregado> membros_do_agregado = MembroDoAgregado.devolveTodosDoCliente(id_cliente);

		ClienteEmpresa cliente_empresa = new ClienteEmpresa(id_cliente, nome, sexo, bi, data_de_nascimento, nif, email, telefone, telemovel, morada,
				grupo_sanguineo, codigo_postal, lista_de_tratamentos_passados, lista_de_doencas_passadas, numero_de_cliente, membros_do_agregado,
				id_empresa, numero_de_ordem);

		return cliente_empresa;
	}

	public static void insere(final Hashtable<String, Object> dados_cliente_empresa) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		Cliente.insereEmpresa(dados_cliente_empresa);

	}

	public String getTipo() {
		return "empresa";
	}

	private int id_empresa;
	private int numero_de_ordem;
}
